home *** CD-ROM | disk | FTP | other *** search
- { Prime v1.1 (C) 1997 Allen Cheng. All Rights Reserved.
-
- Please feel free to use this unit on your program,
- give me Credit if you like.... Enjoy!
-
- This is quite fast, and is about 50-80% faster than the fastest one in SWAG.
- As this Function is optimized for large numbers, you may not see any
- differents is small numbers, but it only takes about 6 seconds to find all
- the primes from 1000000 to 1020000. A newer version will be out soon
- which should be about 10-20% faster.
-
- Homepage: http://www.geocities.com/SiliconValley/Park/8979/
- Email: ac@4u.net
-
- You can always download the newest version from my Homepage.
-
- P.S. If you've found some ways to optimized this unit, please feel free to
- change anything, it's nice if you can send me a copy.
- }
- Unit Prime;
-
- Interface
- Function PrimeChk(Num: LongInt): Boolean;
-
- Implementation
-
- Function PrimeChk(Num: LongInt): Boolean;
- Var x : Longint;
- y : Integer;
- Begin
- x := -1; y := 0;
- Case Num Of
- 2,3 : Begin PrimeChk := True; Exit; End;
- 1 : Begin PrimeChk := False; Exit; End;
- End;
- If (Num mod 2)=0 Then Begin PrimeChk := False; Exit; End; {Check if Even #}
-
- While (Sqr(x) < Num) And (y < 2) Do
- Begin
- x := x + 2; { Only check with Odd numbers }
- If (Num mod x)=0 Then y:=y+1;
- End;
- If y <> 1 Then PrimeChk := False Else PrimeChk := True;
- End;
-
- End.
-
- { ------------ DEMO --------------- }
-
- Program Example;
- Uses Prime;
- Var Number : LongInt;
- Begin
- {List all Primes from 1000000 to 1020000}
- For Number := 1000000 to 1020000 Do
- If PrimeChk(Number) = True Then Write(Number,' ');
- End.